/**
 * @typedef CreateToolClassifyBody
 * @property {string} name.required - 分类名称
 * @property {string} icon.required - 分类类名icon
 */

/**
 * @typedef UpdateToolClassifyBody
 * @property {integer} id.required - 分类id
 * @property {string} name.required - 分类名称
 * @property {string} icon.required - 分类类名icon
 */

/**
 * @typedef CreateToolBody
 * @property {string} name.required - 工具名称
 * @property {string} description.required - 工具描述
 * @property {string} url.required - 工具地址
 * @property {integer} classifyId.required - 所属分类id
 * @property {string} logo - 分类类名icon
 */

/**
 * @typedef UpdateToolBody
 * @property {integer} id.required - 工具id
 * @property {string} name.required - 工具名称
 * @property {string} url.required - 工具地址
 * @property {string} description.required - 工具描述
 * @property {integer} classifyId.required - 所属分类id
 * @property {string} logo - 分类类名icon
 */

/**
 * @typedef DeleteBody
 * @property {integer[]} ids.required - id集合
 */

const express = require('express')
const router = express.Router()
const auth = require('@/middleware/auth.middleware')
const toolController = require('@/controllers/tool.controller')

/**
 * 工具分类列表查询
 * @route GET /tool/classify
 * @summary 工具分类列表查询
 * @group 工具管理
 * @returns {object} 200
 * @returns {Error}  default - Unexpected error
 * @access tool-classify-permission:btn:find
 * @security JWT
 */
router.get('/classify', auth(), toolController.findToolClassify)

/**
 * 工具列表查询
 * @route GET /tool
 * @summary 工具列表查询
 * @group 工具管理
 * @returns {object} 200
 * @returns {Error}  default - Unexpected error
 * @access tool-list-permission:btn:find
 */
router.get('/', toolController.findTools)

/**
 * 工具分类创建
 * @route POST /tool/classify
 * @summary 工具分类创建
 * @group 工具管理
 * @param {CreateToolClassifyBody.model} CreateToolClassifyBody.body.required
 * @returns {object} 200
 * @returns {Error}  default - Unexpected error
 * @access tool-classify-permission:btn:add
 * @security JWT
 */
router.post('/classify', auth(), toolController.createToolClassify)

/**
 * 工具创建
 * @route POST /tool
 * @summary 工具创建
 * @group 工具管理
 * @param {CreateToolBody.model} CreateToolBody.body.required
 * @returns {object} 200
 * @returns {Error}  default - Unexpected error
 * @access tool-list-permission:btn:add
 * @security JWT
 */
router.post('/', auth(), toolController.createTool)

/**
 * 工具批量导入
 * @route POST /batch-import
 * @summary 工具创建
 * @group 工具管理
 * @returns {object} 200
 * @returns {Error}  default - Unexpected error
 * @access tool-list-permission:btn:add
 * @security JWT
 */
router.post('/batch-import', auth(), toolController.batchImportTool)

/**
 * 工具分类更新
 * @route PUT /tool/classify
 * @summary 工具分类更新
 * @group 工具管理
 * @param {UpdateToolClassifyBody.model} UpdateToolClassifyBody.body.required
 * @returns {object} 200
 * @returns {Error}  default - Unexpected error
 * @access tool-classify-permission:btn:edit
 * @security JWT
 */
router.put('/classify', auth(), toolController.updateToolClassify)

/**
 * 工具更新
 * @route PUT /tool
 * @summary 工具更新
 * @group 工具管理
 * @param {UpdateToolBody.model} UpdateToolBody.body.required
 * @returns {object} 200
 * @returns {Error}  default - Unexpected error
 * @access tool-list-permission:btn:edit
 * @security JWT
 */
router.put('/', auth(), toolController.updateTool)

/**
 * 工具分类删除
 * @route DELETE /tool/classify
 * @summary 工具分类删除
 * @group 工具管理
 * @param {DeleteBody.model} DeleteBody.body.required
 * @returns {object} 200
 * @returns {Error}  default - Unexpected error
 * @access tool-classify-permission:btn:delete
 * @security JWT
 */
router.delete('/classify', auth(), toolController.deleteToolClassifys)

/**
 * 工具删除
 * @route DELETE /tool
 * @summary 工具删除
 * @group 工具管理
 * @param {DeleteBody.model} DeleteBody.body.required
 * @returns {object} 200
 * @returns {Error}  default - Unexpected error
 * @access tool-list-permission:btn:delete
 * @security JWT
 */
router.delete('/', auth(), toolController.deleteTools)

/**
 * 工具分类和工具树形结构获取
 * @route get /tool/tree-list
 * @summary 工具分类和工具树形结构获取
 * @group 工具管理
 * @returns {object} 200
 * @returns {Error}  default - Unexpected error
 * @access tool-list-permission:btn:delete
 * @security JWT
 */
router.get('/tree-list', toolController.findToolTree)

module.exports = router
